import axios from 'axios'
import { Message } from 'element-ui'

export const instance = axios.create({
    baseURL: process.env.VUE_APP_URL || '',
    timeout: 30000,
});

/**
 * 请求拦截
 * 可以插入请求头
 * 可以签名
 */
instance.interceptors.request.use(function(config) {
    // 请求头中加入token
    const token = localStorage.getItem('token');
    token && (config.headers['token'] = localStorage.getItem('token'));
}, function(error) {
    Promise.reject(error)
})

/**
 * 响应拦截
 * 可以验签
 */
instance.interceptors.response.use(function(response) {
    return response;
}, function(error) {
    Promise.reject(error)
});

const request = async function(callback) {
    /**
     *  callback 解构后的参数 可以用来定制特定接口的请求信息
     */
    // const { url, method, data, header } = callback;

    return instance.request({
        ...callback
    }).then( res => {
        console.log('api response',{ res })
        if (res.data.status === 'success') {
            // 请求成功
            return res.data
        }
        Toast({
            message: res.data.message
        })
        // 此处可以返回别的内容 去进行扩展
        return res.data;
    }).catch(e=>{
        // 200~300 以外的请求错误
        console.log('response error', {e})
        // 可能根据 400 404 500 去 额外 弹出提示框
        // 返回false 给调用方去做请求成功与否的判断
        Toast({
            message: e.response.status+"错误"
        })
        return false;
    })
}

const Toast = function(obj) {
    Message({
        ...obj,
        message: obj.message || '请求失败',
        type: obj.type || 'error',
        duration: obj.duration || 2000,
    })
}


export default request;